import torch

input = [3, 4, 6, 5,
         2, 4, 6, 8,
         1, 6, 7, 8,
         9, 7, 4, 6]
input = torch.Tensor(input).view(1, 2, 2, 4)
# size() 是 PyTorch 张量的方法（function call）
# shape 是 PyTorch 张量的属性（attribute）
# 推荐使用 shape：因为它是属性访问，语法更简洁，且与 NumPy 的习惯保持一致
# size() 的优势：可以接受参数，如 input.size(0) 获取特定维度的大小
print(input.size())
print(input.shape)

print(input.data)
print(input.flatten(3))

maxPooling_layer = torch.nn.MaxPool2d(kernel_size=2)

output = maxPooling_layer(input)

print(output)

# | 网络类型                | 层类名              | 输入维度格式                                                    | 说明         |
# | ------------------- | ---------------- | --------------------------------------------------------- | ---------- |
# | 全连接层                | `nn.Linear`      | `(N, D)`                                                  | 只需要批量和特征维  |
# | 一维卷积                | `nn.Conv1d`      | `(N, C, L)`                                               | 常用于语音/时间序列 |
# | 二维卷积                | `nn.Conv2d`      | `(N, C, H, W)`                                            | 常用于图像      |
# | 三维卷积                | `nn.Conv3d`      | `(N, C, D, H, W)`                                         | 用于视频或3D体数据 |
# | 循环网络 (RNN/LSTM/GRU) | `nn.LSTM`        | `(seq_len, batch, feature)` 或 `(batch, seq_len, feature)` | 顺序任务       |
# | Transformer 编码器     | `nn.Transformer` | `(seq_len, batch, embedding_dim)`                         | 序列输入       |

# | 函数名                   | 分布类型          | 默认区间 / 参数     | 数据类型    | 常见用途          |
# | --------------------- | ------------- | ------------- | ------- | ------------- |
# | `torch.rand()`        | 均匀分布 U(0,1)   | [0, 1)        | float32 | 随机初始化         |
# | `torch.randn()`       | 标准正态分布 N(0,1) | 均值=0, 方差=1    | float32 | 常用初始化         |
# | `torch.randint()`     | 整数均匀分布        | `[low, high)` | int64   | 随机索引或标签       |
# | `torch.randn_like(x)` | 标准正态分布        | 同形状同dtype     | float32 | 生成与 x 形状相同的噪声 |
# | `torch.rand_like(x)`  | 均匀分布          | 同形状同dtype     | float32 | 同上（均匀分布）      |
# | `torch.normal()`      | 正态分布 N(μ, σ²) | 自定义均值与标准差     | float32 | 高斯噪声等         |
# | `torch.bernoulli()`   | 伯努利分布（0/1）    | 概率 p          | float32 | 模拟二分类随机采样     |
# | `torch.poisson()`     | 泊松分布          | 以输入值为 λ       | float32 | 事件计数模拟        |
# | `torch.multinomial()` | 多项分布          | 概率向量          | long    | 分类采样          |
